package fiuba.webapp.action;

import fiuba.webapp.action.BaseAction;
import fiuba.model.Configuracion;
import fiuba.model.Menu;
import fiuba.model.Noticia;
import fiuba.model.Estructura;
import fiuba.model.Seccion;
import fiuba.service.GenericManager;
import fiuba.service.MenuManager;
import fiuba.service.NoticiaManager;
import fiuba.service.EstructuraManager;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;


public class VerNoticiaAction extends BaseAction {
	
	private static final long serialVersionUID = 3661474075831926467L;
	private NoticiaManager noticiaManager;
    private Noticia noticia;
    private Long id;
	private EstructuraManager estructuraManager;
    private MenuManager menuManager;
    private String contenido = "";
    private String resumen = "";
    private String titulo = "";
    private String autor = "";
    private String html;
    private String headHtml;
    private String tituloPagina;
    private String idSeccion = "";
	private GenericManager<Configuracion,Long> configuracionManager;
    private GenericManager<Seccion, Long> seccionManager;

	public void setConfiguracionManager(
			GenericManager<Configuracion, Long> configuracionManager) {
		this.configuracionManager = configuracionManager;
	}
    
    public String getContenido() {
		return contenido;
	}

	public void setContenido(String contenido) {
		this.contenido = contenido;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getAutor() {
		return autor;
	}

	public void setAutor(String autor) {
		this.autor = autor;
	}

	public String ver() {
		Configuracion config = this.configuracionManager.get(1L);
		
		this.tituloPagina = config.getPageTitle();
		this.headHtml = estructuraManager.generateHeadHtml(config);
		// Si hay id, es ver noticia creada, si no es preview
	    if (id != null) {
			// Si el sitio esta OFFLINE => Redireccionar a "Sitio Offline"
			if ( ! config.isOnline()) {
				return "offline";
			}
			// Intento ver la noticia solicitada
			try { 
	    		noticia = noticiaManager.get(id);
	    		// Si la noticia no esta disponible, reenviar al index
	    		if (! noticia.isPublicada()) {
	    			return "index";
	    		}
	    		if (noticia.getFechaBaja() != null) {
	    			return "index";
	    		}
	    	}
	    	catch (Exception e) {
	    		createTransientNews();
	    	}
	    	noticiaManager.registrarVista(id);
	    }
	    else {
    		createTransientNews();
	    }
	    try {
			Seccion seccion = this.noticia.getSeccion();
	    	Estructura estructura = seccion.getEstructura();
	    	// Poner el contenido de la noticia
			StringBuffer htmlNoticia = new StringBuffer();
			htmlNoticia.append(this.noticiaManager.procesarHeaderNoticia(this.noticia,config,this));
			htmlNoticia.append( this.noticia.getContenidoCompleto() );
			// Necesita obtener el IP
			HttpServletRequest request = this.getRequest(); 
			String remoteIp = request.getRemoteAddr();
			// Ahora si, tener el HTML total
	    	this.html = estructuraManager.generateHtml(estructura, htmlNoticia.toString(),seccion.getMenu(),remoteIp);
	    }
	   catch (Exception e) {
	    	log.debug("NO ENCONTRO ESTRUCTURA");
		    this.html = "<body>" + this.noticia.getContenido() + "</body>";
	    }
    	return SUCCESS;
    }
    
    public void createTransientNews() {
    	noticia = new Noticia();
    	noticia.setTitulo(titulo);
    	noticia.setAutor(autor);
    	noticia.setContenido(contenido);
    	noticia.setResumen(resumen);
    	noticia.setFechaCreacion(new Date());
    	try {
    		Seccion s = this.seccionManager.get(Long.parseLong(this.idSeccion));
    		noticia.setSeccion(s);
    	}
    	catch (Exception e) {}
    }
   
	public void setNoticiaManager(NoticiaManager noticiaManager) {
		this.noticiaManager = noticiaManager;
	}

	public Noticia getNoticia() {
		return noticia;
	}

	public void setNoticia(Noticia noticia) {
		this.noticia = noticia;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public void setEstructuraManager(EstructuraManager estructuraManager) {
		this.estructuraManager = estructuraManager;
	}

	public String getHtml() {
		return html;
	}

	public void setHtml(String html) {
		this.html = html;
	}

	public String getTituloPagina() {
		return tituloPagina;
	}

	public void setTituloPagina(String tituloPagina) {
		this.tituloPagina = tituloPagina;
	}

	public String getHeadHtml() {
		return headHtml;
	}

	public void setHeadHtml(String headHtml) {
		this.headHtml = headHtml;
	}

	public void setMenuManager(MenuManager menuManager) {
		this.menuManager = menuManager;
	}

	public String getIdSeccion() {
		return idSeccion;
	}

	public void setIdSeccion(String idSeccion) {
		this.idSeccion = idSeccion;
	}

	public void setSeccionManager(GenericManager<Seccion, Long> seccionManager) {
		this.seccionManager = seccionManager;
	}

	public String getResumen() {
		return resumen;
	}

	public void setResumen(String resumen) {
		this.resumen = resumen;
	}

}
